package com.hcc.repository.gen.generator;

import com.hcc.repository.gen.constants.GenerateTypeConstants;
import com.hcc.repository.gen.generator.impl.ControllerGenerator;
import com.hcc.repository.gen.generator.impl.EntityGenerator;
import com.hcc.repository.gen.generator.impl.MapperGenerator;
import com.hcc.repository.gen.generator.impl.RepositoryGenerator;
import com.hcc.repository.gen.generator.impl.RepositoryImplGenerator;
import com.hcc.repository.gen.generator.impl.ServiceGenerator;
import com.hcc.repository.gen.generator.impl.ServiceImplGenerator;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * GeneratorFactory
 *
 * @author hushengjun
 * @date 2023/9/28
 */
public class GeneratorFactory {

    private static final Map<String, Generator> generatorMap = new LinkedHashMap<>();
    static {
        generatorMap.put(GenerateTypeConstants.ENTITY, new EntityGenerator());
        generatorMap.put(GenerateTypeConstants.MAPPER, new MapperGenerator());
        generatorMap.put(GenerateTypeConstants.REPOSITORY, new RepositoryGenerator());
        generatorMap.put(GenerateTypeConstants.REPOSITORY_IMPL, new RepositoryImplGenerator());
        generatorMap.put(GenerateTypeConstants.SERVICE, new ServiceGenerator());
        generatorMap.put(GenerateTypeConstants.SERVICE_IMPL, new ServiceImplGenerator());
        generatorMap.put(GenerateTypeConstants.CONTROLLER, new ControllerGenerator());
    }

    public static List<Generator> allGenerator() {
        return new ArrayList<>(generatorMap.values());
    }

    public static Generator getGenerator(String generateType) {
        return generatorMap.get(generateType);
    }

    public static void initTemplatePath(String generateType, String templatePath) {
        getGenerator(generateType).setTemplatePath(templatePath);
    }

}
